/*
 * NotQuery.cpp
 *
 *  Created on: 2020年12月13日
 *      Author: san
 */

#include "NotQuery.h"

TextQuery::QueryResult NotQuery::eval(const TextQuery &text)
{
	// 通过 Query 成员对eval进行的虚调用
	TextQuery::QueryResult result = query.eval(text);
	// 开始时结果set为空
	auto ret_lines =  std::make_shared<std::set<line_no>>();
	auto beg = result.begin(), end = result.end();

	auto sz = result.get_file()->size();

	for (std::size_t i = 0; i != sz; ++i)
	{
		// 对每一行
		if (*beg != i || beg == end)
		{
			ret_lines->insert(i);
		}
		else if (beg != end)
			++beg;
	}

	return TextQuery::QueryResult(rep(), ret_lines, result.get_file());
}
